/*
 * Copyright 2004 Sun Microsystems, Inc. All  Rights Reserved.
 *  
 * Redistribution and use in source and binary forms, with or 
 * without modification, are permitted provided that the following 
 * conditions are met:
 * 
 * -Redistributions of source code must retain the above copyright  
 *  notice, this list of conditions and the following disclaimer.
 * 
 * -Redistribution in binary form must reproduce the above copyright 
 *  notice, this list of conditions and the following disclaimer in 
 *  the documentation and/or other materials provided with the 
 *  distribution.
 *  
 * Neither the name of Sun Microsystems, Inc. or the names of 
 * contributors may be used to endorse or promote products derived 
 * from this software without specific prior written permission.
 * 
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
 * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
 * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
 * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
 * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *  
 * You acknowledge that Software is not designed, licensed or 
 * intended for use in the design, construction, operation or 
 * maintenance of any nuclear facility.
 */
package rmi;

import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import agenda.Practica1PersistentManager;
import agenda.Registro;
import agenda.RegistroDAO;

public class DBAgenda   implements Iagenda {

public DBAgenda()throws RemoteException{
	 
}
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static void main(String args[]) {

		try {
			DBAgenda obj = new DBAgenda();
			Iagenda stub = (Iagenda) UnicastRemoteObject.exportObject(obj, 0);

			// Bind the remote object's stub in the registry
			Registry registry = LocateRegistry.getRegistry();
			registry.rebind("Hello", stub);

			System.err.println("Server ready");
		} catch (Exception e) {
			System.err.println("Server exception: " + e.toString());
			e.printStackTrace();
		}
	}
	 
public void borrar(String telefono) throws RemoteException, PersistentException {
        PersistentTransaction t = Practica1PersistentManager.instance().getSession().beginTransaction();
        try {
                agenda.Registro lormRegistro = agenda.RegistroDAO.loadRegistroByORMID(telefono);
                agenda.RegistroDAO.delete(lormRegistro);
                //System.out.println("borrado "+lormRegistro.getID());
                t.commit();
        }
        catch (Exception e) {
                t.rollback();
        }
        finally{
                Practica1PersistentManager.instance().disposePersistentManager();
        }
	}
	 
	public void createTestData(String nombre,String telefono) throws PersistentException {
		PersistentTransaction t = agenda.Practica1PersistentManager.instance().getSession().beginTransaction();
		try {
			agenda.Registro lagendaRegistro = agenda.RegistroDAO.createRegistro();
			lagendaRegistro.setNombre(nombre);
			lagendaRegistro.setTelefono(telefono);
			// TODO Initialize the properties of the persistent object here, the following properties must be initialized before saving : telefono
			agenda.RegistroDAO.save(lagendaRegistro);
			t.commit();
		}
		catch (Exception e) {
			t.rollback();
		}
		
	}
	@Override

	public String anadir(String nombre,String telefono) throws PersistentException {
		 try{
			 try{
				createTestData(nombre,telefono);
			 }
			 finally {
				 agenda.Practica1PersistentManager.instance().disposePersistentManager();
			 }
		 }
		 catch  (Exception e){
			 e.printStackTrace();
		 }
		return null;

	}

	@Override
	public Registro[] buscar(String nombre,String telefono) {
		System.out.println("buscando en la base");
        try {
                return RegistroDAO.listRegistroByQuery(null, nombre, nombre);
        } catch (PersistentException e) {
                e.printStackTrace();
        }
        return null;

	}
	public void borrar() throws RemoteException, PersistentException {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void modificar() throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String borrar(String string, String string2) throws RemoteException,
			PersistentException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Registro[] buscar(String nombre) throws RemoteException {
		// TODO Auto-generated method stub
		return null;
	}

	 
	
	 
	 
}
